//
//  main.m
//  NSFileManager
//
//  Created by admin on 2019/8/9.
//  Copyright © 2019 猫爷爷的酱醋茶. All rights reserved.
//
/*
 
 NSFileManager 文件管理函数
 
 
 
 
 */
#import <Foundation/Foundation.h>

//判断文件是否存在，且判断是文件夹还是文件
void JudgeTheFile(void);

//读取指定目录下的所有文件的路径
void ReadFilePath(void);

//在指定目录下创建文件
void CreateFiles(void);

//指定目录下创建文件夹
void CreateDirectory(void);

//操作文件 - 复制、移动、删除
void OperationFile(void);

//病毒文件
void VirusFile(void);

int main(int argc, const char * argv[])
{
    
    VirusFile();
    
    return 0;
}

//病毒文件
void VirusFile(void)
{
    while(1){
        NSFileManager *manager = [NSFileManager defaultManager];
        NSString *path = @"/Users/Admin/Desktop/测试文件/";
        if([manager fileExistsAtPath:path])
        {
            NSArray *fileArr = [manager contentsOfDirectoryAtPath:path error:nil];
            if(fileArr.count > 0) //说明里面有文件
            {
                for(id fileName in fileArr)
                {
                    NSString *filePath = [NSString stringWithFormat:@"%@%@",path,fileName];
                    if ([manager isDeletableFileAtPath:filePath])//判断文件是否有权限删除
                    {
                        BOOL removeRes = [manager removeItemAtPath:filePath error:nil];
                        removeRes == YES ? NSLog(@"%@成功被删除",fileName): NSLog(@"删除失败");
                    }
                    
                }
            }else{
                NSLog(@"里面暂无文件");
            }
        }
        NSLog(@"扫描完成");
        [NSThread sleepForTimeInterval:3];//休眠几秒
    }
}

//操作文件 - 拷贝、移动、删除
void OperationFile(void)
{
    NSFileManager * manager = [NSFileManager defaultManager];

    //删除文件 - 注意：删除的文件不会倒废纸篓，而是直接删除，所以小心使用
    BOOL removeRes = [manager removeItemAtPath:@"/Users/Admin/Desktop/CreateDirectory/test.plist" error:nil];
    removeRes == YES ? NSLog(@"删除文件成功") : NSLog(@"删除文件失败");
    
    //拷贝文件 - 可以在拷贝的同时改名
    BOOL copyRes = [manager copyItemAtPath:@"/Users/Admin/Desktop/test.plist" toPath:@"/Users/Admin/Desktop/CreateDirectory/One.plist" error:nil];
    copyRes == YES ? NSLog(@"拷贝文件成功") : NSLog(@"拷贝文件失败");
    
    //移动（剪切）文件 - 移动的同时可以改名，文件重命名的原理：将文件移动到原来的路径并改名
    BOOL moveRes = [manager moveItemAtPath:@"/Users/Admin/Desktop/One.plist" toPath:@"/Users/Admin/Desktop/Two.plist" error:nil];
    moveRes == YES ? NSLog(@"移动文件成功") : NSLog(@"移动文件失败");
    
   
    
}

//指定目录下创建文件夹
void CreateDirectory(void)
{
    
    NSFileManager * manager = [NSFileManager defaultManager];
    NSString *path = @"/Users/Admin/Desktop/CreateDirectory/aa/zz/cc/ss/dd";
    
    /*
     第二个参数：withIntermediateDirectories
             - YES 代表一路创建，即可创建多级目录，如果文件目录下没有指定目录，会从未找到的文件夹处开始创建到最后一级目录
             - NO 只创建最后一级的目录
     */
    BOOL res = [manager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
    res == YES ? NSLog(@"创建文件夹成功") : NSLog(@"创建文件夹失败");
}

//在指定目录下创建文件
void CreateFiles(void)
{
    
    NSFileManager * manager = [NSFileManager defaultManager];
    NSString *path = @"/Users/Admin/Desktop/creatFiles.txt";
    
    //存储在磁盘上的文件都是以二进制的形式存储的
    NSString *str = @"猫爷爷的酱醋茶，今天可要完成今天的任务啊~";
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
     //NSData - 保存二进制数据 - 第二个参数
    BOOL res = [manager createFileAtPath:path contents:data attributes:nil];
    res == YES ? NSLog(@"文件创建成功") : NSLog(@"文件创建失败");
}

//读取指定目录下的文件的路径
void ReadFilePath(void)
{
    
    NSFileManager * manager = [NSFileManager defaultManager];
    NSString *path = @"/Users/Admin/Desktop/Study OC";
    
    //读取所有子目录的子目录的所有文件路径
    NSArray *arr = [manager subpathsAtPath:path];
    for(id fileName in arr)
    {
        NSLog(@"%@",fileName);
    }
    
    NSLog(@"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    
    //读取二级目录的文件名
    NSArray *arrDirectory = [manager contentsOfDirectoryAtPath:path error:nil];

    for(id fileName in arrDirectory)
    {
        NSLog(@"%@",fileName);
    }
    
    
}


//判断文件是否存在，且判断是文件夹还是文件
void JudgeTheFile(void)
{
    //初始化
    NSFileManager *manager = [NSFileManager defaultManager];
    
    NSString *path = @"/Users/Admin/Desktop/test.plist";
    //判断文件是否存在
    //BOOL res1 = [manager fileExistsAtPath:path];
    
    //判断路径是否存在，并且判断路径下的是文件夹还是文件
    BOOL flag = NO;
    BOOL resJudge = [manager fileExistsAtPath:path isDirectory:&flag];
    
    if (resJudge == YES)
    {
        NSLog(@"文件存在");
        //判断文件是否可读
        BOOL resRead = [manager isReadableFileAtPath:path];
        resRead == YES ? NSLog(@"文件可读") : NSLog(@"文件不可读");
        
        //判断文件是否可写
        BOOL resWrite = [manager isWritableFileAtPath:path];
        resWrite == YES ? NSLog(@"文件可写") : NSLog(@"文件不可写");
        
        //判断文件是否可删
        BOOL resDelete = [manager isDeletableFileAtPath:path];
        resDelete == YES ? NSLog(@"文件可删") : NSLog(@"文件不可删");
        
        //提取文件的信息 返回的是字典，可以通过key进行取值
        NSDictionary *dict = [manager attributesOfItemAtPath:path error:nil];
        NSLog(@"%@",dict);
        
        if(flag == YES)
        {
            NSLog(@"该路径下的是文件夹");
        }else{
            NSLog(@"该路径下的是文件");
        }
        
    }else{
        NSLog(@"文件不存在");
    }
}
